0 REM" P.J.PONZO*83*WATERLOO/ONTARIO 1 [143]" 1000 GOSUB60000:PRINTCHR$(142):PRINT"[147] SPRITES-2" 1001 PRINT"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]" 1002 PRINT"[221]  MORE ON SPRITES [146] [221]":MS$="PONZOTUTOR" 1003 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189][144]":GOSUB63100:MS$=" WELCOME!" 1005 GOSUB63100:GOSUB10000 1010 V=53248:POKE2040,13:POKEV+1,150:POKEV,150:POKEV+39,1:POKEV+29,1:POKEV+23,1 1020 POKEV+39,6:POKEV+21,1:PRINT"THIS IS A BLUE SPRITE.":FORT=1TO900:NEXT 1030 PRINT"A 'SORT-OF' LUNAR LANDER.":FORT=1TO1000:NEXT 1040 PRINT"LET'S LOOK AT IT MORE CLOSELY." 1050 MS$="LET'S LOOK":GOSUB63100:GOSUB63000:POKEV+21,0 1060 PRINT"[147]WE'LL DISPLAY THE PIXELS THAT MAKE" 1070 PRINT"UP THIS SPRITE...":GOSUB63000 1075 POKEV,255:POKEV+1,180:POKEV+21,1 1080 PRINT"[147]":GOSUB10200 1085 FORI=1TO5 1086 PRINTDN$"NOW, IN BINARY ":FORT=1TO50:NEXT 1087 PRINTDN$" ":FORT=1TO50:NEXT 1088 NEXT:GOSUB10400 1090 FORI=1TO5 1091 PRINTDN$"...AND IN BIT-PAIRS ":FORT=1TO50:NEXT 1092 PRINTDN$" ":FORT=1TO50:NEXT 1093 NEXT 1100 GOSUB10500:GOSUB63000 1110 PRINTPS$"NOW WE'LL " 1120 PRINTPS$"CHOOSE 4 " 1130 PRINTPS$"COLOURS AND " 1140 PRINTPS$"SET EACH " 1150 PRINTPS$"PIXEL PAIR " 1160 PRINTPS$"TO A COLOUR " 1170 PRINTPS$"ACCORDING TO" 1180 PRINTPS$"00[146]=COLOUR #0" 1190 PRINTPS$"01[146]=COLOUR #1" 1200 PRINTPS$"10[146]=COLOUR #2" 1210 PRINTPS$"11[146]=COLOUR #3":GOSUB63000 1215 GOSUB10600:FORI=1TO5:PRINTDN$"BASE OF VIDEO CHIP":FORT=1TO50:NEXT 1216 PRINTDN$"BASE OF VIDEO CHIP":FORT=1TO50:NEXT:NEXT 1220 PRINTPS$"V=53248:VIDEO":V=53248 1225 GOSUB63000:PRINTDN$"[144]SET COLOUR #0=1(WHITE)" 1230 PRINTPS$"POKEV+33,1 ":POKEV+33,1 1240 GOSUB63000:PRINTDN$"V+33=53281(BACKGROUND)" 1245 GOSUB63000:PRINTDN$"SET COLOUR #1=0(BLACK)" 1250 PRINTPS$"POKEV+37,0 ":POKEV+37,0 1260 GOSUB63000:PRINTDN$"V+37=SPRITE MULTI-COLOUR REG'R #0" 1265 GOSUB63000:PRINTDN$"SET COLOUR #2=2(RED)" 1270 PRINTPS$"POKEV+39,2 ":GOSUB63000:POKEV+39,2 1280 GOSUB63000:PRINTDN$"V+39=COLOUR REGISTER FOR SPRITE #0" 1285 GOSUB63000:PRINTDN$"SET COLOUR #3=3(CYAN)" 1290 PRINTPS$"POKEV+38,3 ":POKEV+38,3 1300 GOSUB63000:PRINTDN$"V+38=SPRITE MULTI-COLOUR REG'R #1" :GOSUB63000 1305 PRINTDN$"PLEASE NOTE!!!":GOSUB63000 1310 PRINTDN$"POKEV+39,2[146] CHANGED SPRITE TO RED":GOSUB63000 1320 PRINTDN$"& POKEV+33,1[146] CHANGED BACKGROUND":GOSUB63000 1330 FORI=1TO5 1331 PRINTDN$"BUT WHERE'S THE BLACK AND CYAN??":FORT=1TO50:NEXT 1332 PRINTDN$" ":FORT=1TO50:NEXT 1333 NEXT 1340 MS$=" WATCH!!":PRINT"[147]":POKEV+21,0:GOSUB63100:PRINT"[147]":GOSUB10700 1350 GOSUB60000:MS$="HOW TO DO?":GOSUB63100 1360 PRINT"[147]THE 00[146] COLOUR WAS 'BACKGROUND'" 1370 PRINT"(AND SHARED BY ALL VISIBLE SPRITES)" 1380 PRINT"AND POKE V+33[146] CHANGES THIS COLOUR." 1390 PRINT"THE 10[146] COLOUR WAS THE 'SPRITE COLOUR'" 1400 PRINT"(AND CAN BE DIFFERENT FOR EACH SPRITE)" 1410 PRINT"AND POKE V+39+N[146] CHANGES THIS COLOUR" 1420 PRINT"(FOR SPRITE #N, WITH N=0 TO 7)." 1430 MS$="01[146] & 11[146]???":GOSUB63100:GOSUB63000 1440 PRINT"[147]THEN, IN REGISTERS V+37[146] & V+38[146]" 1450 PRINT"ARE THE SPRITE MULTI-COLOURS[146]!!" 1460 PRINT"POKE V+37[146] AND POKE V+38[146] WITH THE" 1470 PRINT"COLOURS YOU WANT FOR THE 01[146] AND 11" 1480 PRINT"BIT PAIRS!!":MS$="ALL SHARED":GOSUB63100:GOSUB63000 1490 PRINT"[147]OK..OUR BACKGROUND CHANGES AND SO DOES" 1500 PRINT"OUR 'SORT-OF' SPRITE." 1510 PRINT"NOW TO ENABLE[146] MULTI-COLOUR FOR" 1520 PRINT"SPRITE #N, WE: POKE V+28,2^N[146]!!":MS$="ENABLE #N":GOSUB63100:GOSUB63000 1530 PRINT"[147]STILL NO CHANGE IN OUR SPRITE!":GOSUB63000 1540 PRINT"[147]WE MUST PUT THE C64 VIDEO CHIP INTO:" 1550 PRINT"MULTI-COLOUR MODE":PRINT"POKE V+22,PEEK(V+22)OR16" 1560 PRINT"SETTING BIT 4[146]=M[146]ULTI C[146]OLOUR M[146]ODE BIT" 1570 PRINT"THEN THOSE SPRITES WHICH WERE" 1580 PRINT"MULTI-COLOUR ENABLED[146] (POKEV+28,2^N)" 1590 PRINT"BECOME 'MULTI-COLOURED'!!":MS$="BEAUTIFUL!":GOSUB63100:GOSUB63000 1600 PRINT"[147]NOW YOU[157][157][157][184][184][184][145] CHANGE THE COLOURS" 1610 PRINT"OF OUT LUNAR LANDER!" 1620 PRINT"JUST HIT 0[146] OR 1[146] OR 2[146] OR 3[146] TO" 1630 PRINT"CHANGE COLOUR #0,#1,#2 OR #3." 1640 PRINT"...AND HIT 'Q' TO QUIT!":MS$=" READY?":GOSUB63100:GOSUB63000 1645 PRINT"[147]":V=53248:POKEV+22,216:GOSUB10700 1650 DIM CM$(15):DD$="":K=1:D0$=DD$+BL$+DD$:PRINT""; 1651 CM$(1)="VIDEO CHIP BASE ADDRESS" 1652 CM$(2)="PUT 'SHAPE' INTO A BLOCK" 1653 CM$(3)="POINT CHIP TO BLOCK" 1654 CM$(4)="SET 00[146] COLOUR (BACKGROUND)" 1655 CM$(5)="SET 01[146] COLOUR (COLOUR REG'R #0)" 1656 CM$(6)="SET 10[146] COLOUR (SPRITE COLOUR)" 1657 CM$(7)="SET 11[146] COLOUR (COLOUR REG'R #1)" 1658 CM$(8)="GIVE SPRITE #N AN X-POSITION" 1659 CM$(9)="GIVE SPRITE #N A Y-POSITION" 1660 CM$(10)="EXPAND IN Y-DIRECTION" 1661 CM$(11)="EXPAND IN X-DIRECTION" 1662 CM$(12)="PUT CHIP[146] INTO MULTI-COLOUR MODE" 1663 CM$(13)="SPRITE[146] #N INTO MULTI-COLOUR MODE" 1700 GOSUB60000:PRINT"[147]REVIEW:":PRINT"[184][184][184][184][184][184]" 1710 PRINT"V=53248 ":GOSUB10900 1720 PRINT"FORI=0TO62:READX:POKE832+I,X:NEXT":GOSUB10900 1730 PRINT"POKE2040+N,13 ":GOSUB10900 1740 PRINT"POKEV+33,C0 ":GOSUB10900 1750 PRINT"POKEV+37,C1 ":GOSUB10900 1760 PRINT"POKEV+39+N,C2 ":GOSUB10900 1770 PRINT"POKEV+38,C3 ":GOSUB10900 1780 PRINT"POKEV+2*N,X ":GOSUB10900 1790 PRINT"POKEV+2*N+1,Y ":GOSUB10900 1800 PRINT"POKEV+23,1 ":GOSUB10900 1810 PRINT"POKEV+29,1 ":GOSUB10900 1820 PRINT"POKEV+22,PEEK(V+22)OR16 ":GOSUB10900 1830 PRINT"POKEV+28,2^N ":GOSUB10900 9999 MS$="AU REVOIR":PRINT"[147]":GOSUB63100:END 10000 REM LANDER SPRITE 10005 FORI=0TO62:READX:POKE832+I,X:NEXT:RETURN 10010 DATA0,119,64,1,189,208,7,191,116 10011 DATA30,170,100,30,170,100,30,170,100 10012 DATA21,21,84,21,21,84,30,170,100 10013 DATA30,170,100,27,187,116,27,187,116 10014 DATA27,187,116,27,163,116,27,163,116 10015 DATA5,85,80,7,227,80,23,35,84 10016 DATA17,97,68,84,85,21,84,0,21 10100 REM SPRITE BORDER 10105 PRINT" 111111111122222" 10110 PRINT" 123456789012345678901234" 10120 FORI=1TO21:I$=STR$(I):I$=RIGHT$(" "+I$,2):PRINT""I$:NEXT:RETURN 10200 REM DISPLAY PIXELS 10205 PRINT"":FORI=0TO62STEP3:X=PEEK(832+I) 10210 FORJ=7TO0STEP-1 10220 IFXANDP(J)THENPRINTS$(1);:GOTO10240 10230 PRINTS$(0); 10240 NEXT:X=PEEK(832+I+1) 10250 FORJ=7TO0STEP-1 10260 IFXANDP(J)THENPRINTS$(1);:GOTO10280 10270 PRINTS$(0); 10280 NEXT:X=PEEK(832+I+2) 10290 FORJ=7TO0STEP-1 10300 IFXANDP(J)THENPRINTS$(1);:GOTO10320 10310 PRINTS$(0); 10320 NEXT:PRINT:NEXT:GOSUB10100:RETURN 10400 REM SPRITE IN BINARY 10405 PRINT""; 10410 FORI=0TO20:FORJ=3TO26:IFPEEK(1104+40*I+J)=160THENPRINT"1";:GOTO10430 10420 PRINT"0";: 10430 NEXT:PRINT:PRINT"";:NEXT:RETURN 10500 REM SPRITE IN BIT PAIRS 10505 PRINT"";:K=0:A=1104:B=0:C=20:D=3:E=26:F=4:G=49:H=40:A$="1":B$="0" 10510 FORI=BTOC:FORJ=DTOE:IFPEEK(A+H*I+J)=GTHENPRINTR$(K)A$;:GOTO10530 10520 PRINTR$(K)B$; 10530 K=K+1:IFK=FTHENK=B 10540 NEXT:PRINT:K=B:PRINT"";:NEXT:RETURN 10600 REM CLEAR 10610 FORI=1TO20:PRINTPS$"[145]";:FORJ=1TOI:PRINT"";:NEXT 10620 PRINT" ":NEXT:RETURN 10700 REM MOVE SPRITE 10705 PRINT"[147][144]HIT 'Q' TO QUIT":POKE53281,1 10710 V=53248:POKEV+28,1:POKEV+21,1:POKEV+29,O:POKEV+23,0:F=0:G=255 10720 FORT=FTOG:X=T:Y=T:POKEV,X:POKEV+1,Y:GETA$:IFA$="Q"THEN10795 10725 GOSUB10800:NEXT 10730 POKEV+29,1:POKEV+23,0 10740 FORT=GTOFSTEP-1:X=T:Y=T:POKEV,X:POKEV+1,Y:GETA$:IFA$="Q"THEN10795 10745 GOSUB10800:NEXT 10750 POKEV+29,0:POKEV+23,1 10760 FORT=FTOG:X=T:Y=G-T:POKEV,X:POKEV+1,Y:GETA$:IFA$="Q"THEN10795 10765 GOSUB10800:NEXT 10770 POKEV+29,1:POKEV+23,1 10780 FORT=GTOFSTEP-1:X=T:Y=G-T:POKEV,X:POKEV+1,Y:GETA$:IFA$="Q"THEN10795 10790 GOSUB10800:NEXT:GOTO10710 10792 GOSUB10800:NEXT 10795 POKEV+21,0:RETURN 10800 IFA$=""THENRETURN 10810 A=VAL(A$):CC=CC+1:IFCC>15THENCC=0 10820 ON A+1 GOTO10830,10840,10850,10860 10825 RETURN 10830 POKEV+33,CC:RETURN 10840 POKEV+37,CC:RETURN 10850 POKEV+39,CC:RETURN 10860 POKEV+38,CC:RETURN 10900 REM COMMENT 10905 PRINTD0$CM$(K):GOSUB63000:PRINTLEFT$(DD$,K+3):K=K+1:RETURN 60000 REM INITIALIZE 60001 BT$="":FORI=1TO24:BT$=BT$+"":NEXT:PRINTCHR$(142) 60002 PT$="[176][192][192][192][192][192][192][192][192][192][192][174][157][157][157][157][157][157][157][157][157][157][157][157][221][221][157][157][157][157][157][157][157][157][157][157][157][157][173][178][192][192][192][192][192][192][192][192][178][189]" 60003 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][206][163][163][163][163][163][163][163][163][163][163][163][163][205][157][157][157][157][157][157][157][157][157][157][157][157][157][157][165]============[144][167]" 60004 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][208][207][163][163][163][163][163][163][163][163][163][163][208][207][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157]" 60005 PT$=BT$+"[145][145][145][145][145][145]"+PT$ 60007 ML$="" 60008 WD=40:CRT=1024 60009 POKE53281,15:POKE53280,12:PRINT"[144]" 60010 V=53248:FORI=0TO16:POKEV+I,0:NEXT 60011 POKEV+23,0:POKEV+29,0:FORI=0TO7:POKEV+39+I,0:NEXT:POKEV+22,200:POKEV+28,0 60020 S$(0)=" ":S$(1)=" [146]" 60030 DN$="" 60035 BL$=" ":DN$=DN$+BL$+DN$ 60040 PS$="" 60045 R$(0)="[146]":R$(1)="[146]":R$(2)="":R$(3)="" 60100 FORJ=0TO7:P(J)=2^J:NEXT 60200 RETURN 62000 GOSUB63000 62001 PRINTSD$CL$:PRINTCL$:PRINTCL$ 62003 RETURN 63000 PRINT"[144]HIT RETURN[146] TO CONTINUE"; 63001 GETA$:IFA$<>""THEN63001 63002 GETA$:IFA$=""THEN63002 63003 RETURN 63100 FORT=1TO5:PRINTPT$MS$; 63101 PRINTPT$" "; 63102 PRINTPT$MS$;:NEXT 63103 PRINT"[144]":RETURN 63900 SD$="":CL$="[146] [146]" 63901 SR$="" 63902 RETURN